package com.usian.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.usian.mapper.TbItemCatMapper;
import com.usian.pojo.TbItemCat;
import com.usian.redis.RedisClient;
import com.usian.service.ItemCategoryService;
import com.usian.utils.CatNode;
import com.usian.utils.CatResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author chen
 * @date 2021/1/14 - 19:47 - 星期四
 * @project usian_parent
 * @package com.usian.service.impl
 * @by GGbomd猪猪侠
 */
@Service
public class ItemCategoryServiceImpl implements ItemCategoryService {

    @Autowired
    private TbItemCatMapper tbItemCatMapper;

    @Autowired
    private RedisClient redisClient;

    @Value("${PROTAL_CATRESULT_KEY}")
    private String PROTAL_CATRESULT_KEY;

    /**
     * 查询首页商品分类
     * 操作tb_item_cat
     * @return
     */
    @Override
    public CatResult selectItemCategoryAll() {
        //查询redis中的菜单缓存缓存
        CatResult catResultRedis = (CatResult)redisClient.get(PROTAL_CATRESULT_KEY);
        if(catResultRedis!=null){
            //如果有直接返回
            return catResultRedis;
        }
        CatResult catResult = new CatResult();
        // 查询商品分类 查询所有副节点为0的lang类型
        catResult.setData(getCatList(0L));
        //如果没有存进redis中缓存
        redisClient.set(PROTAL_CATRESULT_KEY,catResult);
        return catResult;
    }

    //查询首页商品分类
    private List<?> getCatList(long parentId) {
        // 通过parentId查询所有的副id为0的
        QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id",parentId);
        List<TbItemCat> tbItemCatList = tbItemCatMapper.selectList(queryWrapper);
        List resultList = new ArrayList();
        // 统计记录数
        int count = 0;
        for (TbItemCat tbItemCat : tbItemCatList) {
            //判断是否是父节点
            if (tbItemCat.getIsParent()){ //副节点默认是1 为true
                CatNode catNode = new CatNode();
                catNode.setName(tbItemCat.getName()); //取到每个副节点的名字
                // 是子节点的话 递归调用当前方法在查一遍 用主键id去和副节点id对比
                catNode.setItem(getCatList(tbItemCat.getId()));
                resultList.add(catNode);
                //只取商品分类中的 18 条数据
                if (count == 18){
                    break; //跳出循环
                }
            }else {
                // 不是父节点 取到名字 放到集合中
                resultList.add(tbItemCat.getName());
            }
        }
        return resultList;
    }
}
